草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 如何测量Java线程执行时间?

我想测量Java中的线程执行时间。现在我正在监视线程的开始和结束时间,但我认为它不太准确,因为线程可能会在执行期间挂起。 最佳答案 JavaMXBeans可以提供每线程CPU时间:importjava.lang.management.ManagementFactory;importjava.lang.management.ThreadMXBean;longnanos=ManagementFactory.getThreadMXBean().getThreadCpuTime(Thread.currentThread().getId())

java - 关于servlet的线程安全

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Howdoservletswork?Instantiation,sessionvariablesandmultithreadingservlet是线程安全的吗?例如,如果我打开5个不同的浏览器并向容器中的一个servlet发送请求,它是否仍然是线程安全的,我特别指的是service()方法

java - 具有非最终字段的不可变对象(immutable对象)如何成为线程不安全的?

假设我们有这个//Thisistriviallyimmutable.publicclassFoo{privateStringbar;publicFoo(Stringbar){this.bar=bar;}publicStringgetBar(){returnbar;}}是什么让这个线程不安全?继此question. 最佳答案 Foo在安全发布后是线程安全的。例如,这个程序可以打印“不安全”(它可能不会使用热点/x86的组合)——如果你将bar设置为final,它就不会发生:publicclassUnsafePublication{st

CUDA:来自不同扭曲的2个线程,但相同的块尝试写入相同的共享内存位置:危险吗?

这会导致共享内存中的不一致吗?我的内核代码看起来像这样(伪代码):__shared__uinthistogram[32][64];uintthreadLane=threadIdx.x%32;for(data){histogram[threadLane][data]++;}鉴于在具有64个线程的块中,带有ID“X”和“(X+32)”的线程通常会在矩阵中写入相同位置?该程序计算给定矩阵的直方图。我有一个类似的CPU程序,可以执行相同的操作。由GPU计算的直方图始终比CPU计算的直方图低1/128,我不知道原因。看答案有危险。它导致比赛条件。如果您不能保证一个块中的每个线程都具有对共享内存中位置的唯

java - 线程中的静态同步和非静态同步方法

任何人都可以解释一下声明......“静态同步方法和非静态同步方法不会互相阻塞-它们可以同时运行” 最佳答案 staticsynchronizedvoidtest(){foo();}等于staticvoidtest(){synchronized(MyClass.class){foo();}}同时synchronizedvoidtest(){foo();}等于voidtest(){synchronized(this){foo();}}这意味着:静态方法锁定在类的类对象上。非静态方法锁定在调用它们的实例上(默认情况下,synchroni

java - 多个线程迭代同一个 map

我最近在用Java编写并发程序时遇到了以下困境:假设您有一个全局数据结构,它是常规非同步、非并发库(例如HashMap)的一部分。是否可以允许多个线程在不同的交错周期遍历集合(仅读取,无修改),即当线程2在同一映射上获取他的迭代器时,线程1可能正在迭代一半? 最佳答案 没关系。能够做到这一点是创建迭代器这样的接口(interface)的原因。每个迭代集合的线程都有自己的迭代器实例来保存它的状态(例如,你现在在迭代过程中的位置)。这允许多个线程同时迭代同一个集合。 关于java-多个线程迭

Linux之线程概念

目录一、细粒度划分1、堆区细粒度划分2、物理内存和可执行程序细粒度划分3、虚拟地址到物理地址的转化二、线程的概念1、基本概念2、线程的优点3、线程的缺点4、线程异常 5、线程用途三、Linux下的进程和线程一、细粒度划分1、堆区细粒度划分在语言中,我们知道,用户自己申请的空间是存在于地址空间的堆区上的。可是,堆区是一整块空间,我们每次申请只是申请了其中的一小块,并且我们只是说明了申请空间的大小,拿到的是空间的起始地址。如果,我们多次申请了空间,那么我们怎么知道第一次申请的空间是从堆区哪里到哪里呢,第二次申请的空间是从堆区哪里到哪里呢?于是os就必须对堆区进行更加精细的管理。在Linux下,每次

java - 如何将 EDT 的结果传回另一个线程?

我有以下用例:我有代码在线程A中执行(不是EDT)。然后我想问用户一个问题,但这必须在EDT上完成,因为它涉及Swing代码(打开对话框等)。最后,我想将用户的回答传回线程A,以便它继续。我正在努力寻找一种将用户的答案传递回线程A的好方法。你是怎么做到的? 最佳答案 FutureTaskdialogTask=newFutureTask(newCallable(){@OverridepublicIntegercall(){returnJOptionPane.showConfirmDialog(...);}});SwingUtiliti

java - 有什么方法或工具可以用来验证我的 API 在 Java 中是否是线程安全的?

我做了一个工具,对外提供了一个API,但是我不确定它是否是线程安全的。因为用户可能不想在多线程环境下使用它。有什么方法或工具可以用来验证我的API在Java中是否是线程安全的? 最佳答案 否。没有这样的工具。证明一个复杂的程序是线程安全的非常困难。您必须非常仔细地分析您的程序以确保它是线程安全的。考虑购买“Javaconcurrencyinpractice”(对concurrencyinjava的很好解释)。 关于java-有什么方法或工具可以用来验证我的API在Java中是否是线程安全

java - JavaFX Platform.runLater 的使用和从不同线程访问 UI

我有几个关于Platform.runLater的问题.我有一个JavaFX应用程序类。在这个类中,我运行一个线程(该线程从网络套接字读取数据)。现在当我创建一个新的Stage在线程内,系统抛出一个execption(JavaFX事件调度线程和我的网络读取线程不一样)——我理解这种行为。但另一方面,我将网络阅读器中的文本附加到现有的TextArea或在ListView中添加/删除一些项目-这不会引发异常-为什么?我认为JavaFX是单线程的(ui库部分)。这与Swing中的一样吗:有时它可以工作,有时却只有垃圾(因为EDT)?我的问题:JavaFX事件调度程序线程何时抛出异常,何时不抛出